package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.BaseContext;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.ShoppingCart;
import com.itheima.reggie.service.ShoppingCartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

@RestController
@Slf4j
@RequestMapping("/shoppingCart")
public class ShoppingCartController {
    @Autowired
    private ShoppingCartService shoppingCartService;

    //添加购物车业务
    @PostMapping("/add")
    public R<ShoppingCart> add(@RequestBody ShoppingCart shoppingCart){
        //业务:  根据用户id 将 菜品添加到 购物车
        //1:  获取  用户id
        Long userId = BaseContext.getCurrentId();
        System.out.println("获取的id是什么::::"+userId);
        //2:   根据id 进行查询     如果没有 东西  则 添加 东西
                         //   如果有东西  则 只添加数量
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        // 赋予 条件 根据 用户id查询用户
        wrapper.eq(ShoppingCart::getUserId,userId);
        // 赋予 条件  根据 套餐id  查询套餐是否存在


        if (shoppingCart.getSetmealId()!=null){
            wrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId());
        }else{
            wrapper.eq(ShoppingCart::getDishId,shoppingCart.getDishId());
        }

        // 赋予 条件  根据  菜品id  查询菜品 是否存在

        // 最后进行查询  此人 且 此人 购物车内 有无  商品





        ShoppingCart one = shoppingCartService.getOne(wrapper);
        System.out.println(" 查询一下  one 到底是一个什么类型的数据"+one);
        // 查到之后做 判断
        if (one!=null){   //如果存在  证明购物车里 添加过  此商品  所以 只需要添加个数
            // 表中 number 字段 是代表 每一个菜品的数量
            one.setNumber(one.getNumber()+1);
            // 更新 表 数量
            shoppingCartService.updateById(one);
            shoppingCart = one;

        }else{   //是 购物车中没有 此类商品  要做添加操作
            shoppingCart.setNumber(1);
            shoppingCart.setUserId(userId);
            shoppingCart.setCreateTime(LocalDateTime.now());

            shoppingCartService.save(shoppingCart);

        }
        return R.success(shoppingCart);
    }

    @GetMapping("/list")
    public R<List<ShoppingCart>> list01(){
        //  根据用户id
        Long userId = BaseContext.getCurrentId();
        //  去找  购物车
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId,userId);
        List<ShoppingCart> list = shoppingCartService.list(wrapper);
        return R.success(list);
    }
    //清空购物车
    @DeleteMapping("/clean")
    public R<String> clean(){
        //先去线程中找id
        Long id = BaseContext.getCurrentId();
        //根据id删除所有
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId,id);
        shoppingCartService.remove(wrapper);
        return R.success("恭喜您清空购物车成功");
    }
    @PostMapping("/sub")
    @Transactional
    public R<ShoppingCart> remove(@RequestBody ShoppingCart shoppingCart){
        Long id = BaseContext.getCurrentId();
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId,id);

        //1:现根据id 查询 购物车中 是否有  商品
        if (shoppingCart.getSetmealId()!=null){
            wrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId());
        }else{
            wrapper.eq(ShoppingCart::getDishId,shoppingCart.getDishId());
        }
        //2: 查询 有套餐 或者是 有 菜品  查询有多少份
        ShoppingCart one = shoppingCartService.getOne(wrapper);
        System.out.println("我的这个one是什么"+one);
        //3:  做判断  如果有1 份  则进行删除 操作 , 如果有多分 则进行 -1操作
        if (one.getNumber()>0){   //如果存在  证明购物车里 添加过  此商品  所以 只需要添加个数
            // 表中 number 字段 是代表 每一个菜品的数量
            one.setNumber(one.getNumber()-1);
            // 更新 表 数量
            shoppingCartService.updateById(one);
            if (one.getNumber()==0){
                shoppingCartService.remove(wrapper);
            }
        }

        return R.success(shoppingCart);
            //4:  返回值是 shopping?????
    }
}
